/**
 * 自动生成路由
 * 通过读取文件夹下的vue文件，通过处理自动生成路由
 * @public
 * @author yxc
 * @date 2024/01/10 13:23
 */

// 页面对象
let pages = {};
// 路由集合
let generator = [];

//递归获取src文件夹下的所有.vue文件
const files = require.context("@/views/", true, /.vue/);
files.keys().forEach((key) => {
  pages[key.replace(/(\.\/|\.vue)/g, "")] = files(key).default;
});

//生成所有路由，并去除一级文件夹名称
Object.entries(pages).forEach((routerInfo) => {
  const [path, pageInfo] = routerInfo;
  const regex = /^[^\/]*\/[^\/]*$/;
  if (!regex.test(path)) return;
  let Rpath = path
    .replace(new RegExp("views", "g"), "")
    .replace(new RegExp("components", "g"), "");
  if (path !== "App") {
    generator.push({
      path: "/" + convertString(Rpath)[0],
      name: convertString(Rpath)[1],
      meta: {
        title: pageInfo.title,
        active: Rpath,
      },
      component: pages[path],
    });
  }
});
//生成所有路由，并去除一级文件夹名称
// Object.keys(pages).forEach((item) => {
//   // 正则校验,只需要注册只有一个/的，即一级目录下的vue文件
//   const regex = /^[^\/]*\/[^\/]*$/;
//   if (!regex.test(item)) return;
//   let Rpath = item
//     .replace(new RegExp("views", "g"), "")
//     .replace(new RegExp("components", "g"), "");
//   if (item !== "App") {
//     generator.push({
//       path: "/" + convertString(Rpath)[0],
//       name: convertString(Rpath)[1],
//       meta: {
//         active: Rpath,
//       },
//       component: pages[item],
//     });
//   }
// });

/**
 * 将原始字符串处理
 * @param { String } str 原始字符串
 * @returns
 */
function convertString(str) {
  let index = str.indexOf("/");
  let standard = str.substr(index + 1, str.length);
  // 匹配出-后的第一个字母
  var regex = /-(.)/g;
  let humpResult = standard.replace(regex, (match, p1) => {
    return p1.toUpperCase();
  });

  return [standard, humpResult];
}
//将生成路由导入合并
const routes = [...generator];
console.log("路由集合", routes);
export default routes;
